[C] Apaga linha em um Arquivo

Publicado por Enzo de Brito Ferber 06/03/2006

[ Hits: 17.847 ]

Homepage: http://www.maximasonorizacao.com.br

Download apaga.c




Este script apaga a linha "dita" por um
usuário de um arquivo "dito" pelo mesmo.
Código de minha autoria bem comentado
e simples.... ajuda bastante a entender
manipulação de arquivos, aloção
dinamina de memoria, e maniputação de
strings....

  



Esconder código-fonte

/*********************************************************************************************
Programa: apaga.c
Autor: Enzo Ferber 'Slackware_10'
Propósito: Apaga linha definida por usuário em um arquivo
**********************************************************************************************/

#include <stdio.h>
#include <stdlib.h>

int abreArquivo(char arquivo[]){
    FILE *arqEntrada;
    FILE *arqSaida;
    int line = 0;
    int linha = 1;
    int i;
    char textoArquivo[100];
    char *output;
    output = (char *)malloc((strlen(arquivo)+strlen(".editado")) * sizeof(char));
    strcat(output, arquivo);
    strcat(output, ".editado");
    if((arqEntrada = fopen(arquivo, "r")) == 0){ //testa se o arquivo pode ser aberto
        printf("Impossivel abrir arquivo...\n"); //informa o erro
        exit(1); //finaliza execução
    }
    if((arqSaida = fopen(output, "w")) == 0){ //testa se o arquivo pode ser aberto
        printf("Impossivel abrir arquivo...\n"); //informa o erro
        exit(1); //finaliza execução
    }
    printf("Digite a linha a ser apagada no arquivo: "); //pede a linha
    scanf("%d", &line); //le a linha e armazena na variável 'line'
    rewind(arqEntrada); //certifica de que o cursor esta no primeiro caractere do arquivo
    for(i = 0; !feof(arqEntrada);i++){ //incrementa 'i' enquando não for fim de arquivo
       memset(textoArquivo, '{FONTE}', 100); //inicializa e/ou limpa string 'textoArquivo'
        fgets(textoArquivo, 101, arqEntrada); //pega uma string de 100 caracteres
        if(linha == line){ //se a linha for a escolhida
           fputc('\n', arqSaida); //troca a linha que o usuario quer por nova linha
            linha = linha + 1; //incrementa o contador de linhas
            continue; //volta ao inicio do loop sem executar o resto
        }
        linha = linha + 1; //incrementa o contador de linas
        fputs(textoArquivo, arqSaida); //coloca a string 'textoArquivo' no arquivo encoded.txt
    }
    printf("O arquivo output %c: %s\n",233, output);
    free(output); //desaloca espaço alocado para string contendo novo do novo arquivo
    fclose(arqEntrada); //fecha a stream 'arqEntrada'
    fclose(arqSaida); //fecha a stream 'arqSaida'
}

int main(void){ //rotina principal do programa
    char arquivo[100];
    printf("Digite o caminho completo do arquivo: ");
    __fpurge(stdin); //limpa buffer de entrada
    scanf("%[^\n]", arquivo);
    abreArquivo(arquivo); 
}

        
     

Scripts recomendados

Controle de Funcionários (Básico)

Barra de progresso em forma de “roda”

Ler config

não achei o erro

Vi para Windows


  

Comentários
[1] Comentário enviado por xcolares em 23/06/2010 - 23:51h

Gostaria de saber como faço para ler um arquivo sendo que só o que me interessa nele e a linha que começa com //# e termina também com //# como o exemplo abaixo:
esse é o arquivo, o que quero dele é somente isto:
float Tf=0.058e-6, Tt=500e-6, a1=1.93147180e0/Tf, a2=2.558427881e0/Tt, t0=log(a1/a2)/(a1-a2), Ao=exp(-a1*t0)-exp(-a2*t0), omegao=4.0*atan(1.0)/(3.0*Tf);
for (n=1; n<=nt; n++){
if((n*dt)<=(1.5*Tf)){
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt))*powf((sin(omegao*(float)(n)*dt)),2.0) ;
}else
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt));
}
Se alguém puder me ajudar agradeço.
Adolfo Colares

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const float dt = 4.240384E-10;
nt=t/dt;
float fonte[nt+1];


//############### dados inseridos pelo usuario ###############
float Tf=0.058e-6, Tt=500e-6, a1=1.93147180e0/Tf, a2=2.558427881e0/Tt, t0=log(a1/a2)/(a1-a2), Ao=exp(-a1*t0)-exp(-a2*t0), omegao=4.0*atan(1.0)/(3.0*Tf);
for (n=1; n<=nt; n++){
if((n*dt)<=(1.5*Tf)){
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt))*powf((sin(omegao*(float)(n)*dt)),2.0) ;
}else
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt));
}
//############################################################
FILE *fonte_dat=fopen("dats/fonte.dat","w+");
for(n=0;n<=nt;++n){
fprintf(fonte_dat,"%E\n",fonte[n]);
}
fclose(fonte_dat);


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts